package uam2

import (
	"context"
	"dp-demo/utils"
	"github.com/chromedp/cdproto/target"
	"github.com/chromedp/chromedp"
	"github.com/sirupsen/logrus"
	"time"
)

func (s *UamStruct) userLogin() chromedp.ActionFunc {
	return func(ctx context.Context) error {
		// 等待登录页面加载完毕
		chromedp.WaitVisible(`#app`, chromedp.ByID).Do(ctx)
		// 1. 输入账号密码, SendKeys() 也可以 输入值，但是通常是用来模拟键盘事件来配合页面测试，例如enter按下时页面执行某些操作
		chromedp.SetValue(`document.getElementsByClassName("appearance-none block w-full pl-10 pr-3 py-3 border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-antd-blue-5 focus:border-antd-blue-5 sm:text-sm")[0]`, s.username,
			chromedp.ByJSPath).Do(ctx)
		chromedp.SetValue(`document.getElementsByClassName("appearance-none block pl-10 pr-10 w-full py-3 border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-antd-blue-5 focus:border-antd-blue-5 sm:text-sm")[0]`, s.pwd,
			chromedp.ByJSPath).Do(ctx)
		// 等待两秒
		chromedp.Sleep(1 * time.Second).Do(ctx)
		// 点击登录按钮
		chromedp.Click(`document.getElementsByClassName("w-full flex justify-center py-2 px-4 border border-transparent rounded shadow text-sm tracking-widest font-medium text-white bg-antd-blue-6 hover:bg-antd-blue-7 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-antd-blue-5")[0]`,
			chromedp.ByJSPath).Do(ctx)
		// 获取到token后继续执行后面的操作
		<-s.remoteLoginC
		chromedp.Click(`document.getElementsByClassName("ant-btn ant-btn-primary")[0]`, chromedp.ByJSPath).Do(ctx)
		chromedp.Sleep(time.Second * 1).Do(ctx)
		logrus.Debug("用户登录操作已完成")
		return nil
	}
}

func (s *UamStruct) adminLogin() chromedp.ActionFunc {
	return func(ctx context.Context) error {
		logrus.Debug("开始登录 adminLogin")
		chromedp.SetValue(`document.getElementsByClassName("ant-input")[0]`, s.pwd, chromedp.ByJSPath).Do(ctx)
		chromedp.Sleep(time.Second * 1).Do(ctx)
		chromedp.Click(`document.getElementsByClassName("ant-btn ant-btn-primary ant-btn-block btn")[0]`, chromedp.ByJSPath).Do(ctx)
		logrus.Debug("结束登录 adminLogin")
		return nil
	}
}

func (s *UamStruct) addCluster() chromedp.ActionFunc {
	return func(ctx context.Context) error {
		logrus.Debug("添加主机集群 开始")
		chromedp.Sleep(2 * time.Second).Do(ctx)
		chromedp.WaitVisible("#app", chromedp.ByID).Do(ctx)
		// 点击菜单，主机管理
		chromedp.Click(`document.getElementsByClassName("ant-menu-submenu ant-menu-submenu-inline")[2]`, chromedp.ByJSPath).Do(ctx)
		chromedp.Sleep(time.Second * 1).Do(ctx)
		// 点击菜单，集群列表
		chromedp.Click(`document.getElementsByClassName("ant-menu-item ant-menu-item-only-child")[6]`, chromedp.ByJSPath).Do(ctx)
		chromedp.Sleep(time.Second * 1).Do(ctx)
		// 点击新建按钮,填写相关信息
		chromedp.Click(`document.getElementsByClassName("ant-btn ant-btn-primary pushNotice-button")[0]`, chromedp.ByJSPath).Do(ctx)
		clusterName := utils.RandAllString(5)
		chromedp.SetValue(`document.getElementsByClassName("ant-input")[1]`, clusterName, chromedp.ByJSPath).Do(ctx)
		// 处理这个下拉框
		chromedp.Click(`document.getElementsByClassName("ant-select")[1]`, chromedp.ByJSPath).Do(ctx)
		var dom string
		chromedp.OuterHTML(`document.querySelectorAll('.ant-select-selector>span>input')[1]`, &dom, chromedp.ByJSPath).Do(ctx)
		logrus.Debug("下拉框", dom)
		chromedp.SetValue(`document.querySelectorAll('.ant-select-selector>span>input')[1]`, "3", chromedp.ByJSPath).Do(ctx)
		chromedp.SetValue(`document.getElementsByClassName("ant-input")[4]`, "通过 chromedp 自动添加", chromedp.ByJSPath).Do(ctx)
		chromedp.Sleep(time.Second * 2).Do(ctx)
		// 提交表单
		chromedp.Click(`document.getElementsByClassName("ant-btn ant-btn-primary")[2]`, chromedp.ByJSPath).Do(ctx)
		logrus.Debug("添加主机集群 结束")
		// 切换到用户端页面
		uid := chromedp.FromContext(s.ctx).Target.TargetID
		err := target.ActivateTarget(uid).Do(ctx)
		if err != nil {
			logrus.Error("切换页面时发送错误：", err)
		}

		return nil
	}
}
